using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls; 
using System.Collections.Generic;
using System.Collections;
using System.Data.SqlClient;


public class DBUsuario : DALBase
{
    public static List<AbstractBean> findUsuarios(UsuarioBean usuario, String usuarioSesion)
    {
        List<AbstractBean> lista = new List<AbstractBean>();

        /**********************************************************************/
        using (SqlConnection conn = new SqlConnection(prCadConexion))
        {
            using (SqlCommand cmd = new SqlCommand("USPW_USUARIO_S_BUSQUEDA", conn))
            {
                conn.Open();
                cmd.CommandTimeout = 0;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@USR_CODIGO", fnVerNuloStr(usuario.codigo)));
                cmd.Parameters.Add(new SqlParameter("@USR_LOGIN", fnVerNuloStr(usuario.login)));
                cmd.Parameters.Add(new SqlParameter("@USR_NOMBRE", fnVerNuloStr(usuario.nombre)));
                cmd.Parameters.Add(new SqlParameter("@USR_PERFIL", fnVerNuloStr(usuario.CODIGOPERFIL)));
                cmd.Parameters.Add(new SqlParameter("@HABILITADO", fnVerNuloStr(usuario.flag)));
                cmd.Parameters.Add(new SqlParameter("@CODIGOUSUARIO_SESION", fnVerNuloStr(usuarioSesion)));
                cmd.Parameters.Add(new SqlParameter("@FLAG_SUPERVISOR", fnVerNuloStr(AbstractBean.ACTIVO)));
                cmd.Parameters.Add(new SqlParameter("@PIV_PAG_ACTUAL", usuario.paginaactual));
                cmd.Parameters.Add(new SqlParameter("@PIV_NUMERO_REGISTROS", usuario.registroporpagina));
                cmd.Parameters.Add(new SqlParameter("@BUSCAR_NAME", fnVerNuloStr(usuario.buscarname)));
                cmd.Parameters.Add(new SqlParameter("@BUSCAR_ORDEN", usuario.buscarorden));


                using (SqlDataReader loDr = cmd.ExecuteReader())
                {
                    while (loDr.Read())
                    {
                        UsuarioBean bean = new UsuarioBean();

                        bean.id = loDr.GetValue(loDr.GetOrdinal("id")).ToString().Trim();

                        bean.codigo = loDr.GetValue(loDr.GetOrdinal("codigo")).ToString().Trim();

                        bean.login = loDr.GetValue(loDr.GetOrdinal("login")).ToString().Trim();

                        bean.nombre = loDr.GetValue(loDr.GetOrdinal("nombre")).ToString().Trim();

                        bean.clave = loDr.GetValue(loDr.GetOrdinal("clave")).ToString().Trim();

                        bean.nombreperfil = loDr.GetValue(loDr.GetOrdinal("nombreperfil")).ToString().Trim();

                        bean.flag = loDr.GetValue(loDr.GetOrdinal("flag")).ToString().Trim();

                        bean.supervisor = loDr.GetValue(loDr.GetOrdinal("SUPERVISOR")).ToString().Trim();

                        bean.tamaniototal = loDr.GetValue(loDr.GetOrdinal("tamaniototal")).ToString().Trim();

                        lista.Add(bean);

                    }
                }
            }
        }

        return lista;
    }


    public static UsuarioBean getUsuarioBeanPK(String pk)
    {

        UsuarioBean bean = null;

        using (SqlConnection conn = new SqlConnection(prCadConexion))
        {

            using (SqlCommand cmd = new SqlCommand("USPW_USUARIO_S_PK", conn))
            {

                conn.Open();
                cmd.CommandTimeout = 0;
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("@USR_PK", pk));

                using (SqlDataReader loDr = cmd.ExecuteReader())
                {
                    while (loDr.Read())
                    {
                        bean = new UsuarioBean();
                        bean.id = loDr.GetValue(loDr.GetOrdinal("id")).ToString().Trim();

                        bean.codigo = loDr.GetValue(loDr.GetOrdinal("codigo")).ToString().Trim();

                        bean.nombre = loDr.GetValue(loDr.GetOrdinal("nombre")).ToString().Trim();

                        bean.clave = loDr.GetValue(loDr.GetOrdinal("clave")).ToString().Trim();

                        bean.login = loDr.GetValue(loDr.GetOrdinal("login")).ToString().Trim();

                        bean.flag = loDr.GetValue(loDr.GetOrdinal("flag")).ToString().Trim();

                        bean.codigoperfil = loDr.GetValue(loDr.GetOrdinal("codigoperfil")).ToString().Trim();

                        bean.estadoultimo = loDr.GetValue(loDr.GetOrdinal("estadoultimo")).ToString().Trim();

                        bean.supervisor = loDr.GetValue(loDr.GetOrdinal("SUPERVISOR")).ToString().Trim();

                        bean.nombreperfil = loDr.GetValue(loDr.GetOrdinal("NOMBREPERFIL")).ToString().Trim();

                        bean.idgeocerca = loDr.GetValue(loDr.GetOrdinal("IDGEOCERCA")).ToString().Trim();
                        
                        bean.descripciongeocerca = loDr.GetValue(loDr.GetOrdinal("DESCRIPCION")).ToString().Trim();

                        bean.telefono = loDr.GetValue(loDr.GetOrdinal("TELEFONO")).ToString().Trim();
                    }
                }
            }
        }

        return bean;
    }


    public static void addUsuario(UsuarioBean usuario)
    {
        using (SqlConnection conn = new SqlConnection(prCadConexion))
        {
            using (SqlCommand cmd = new SqlCommand("USPW_USUARIO_I", conn))
            {
                conn.Open();
                cmd.CommandTimeout = 0;
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("@USR_PK", usuario.id));
                cmd.Parameters.Add(new SqlParameter("@USR_CODIGO", usuario.codigo));
                cmd.Parameters.Add(new SqlParameter("@USR_LOGIN", usuario.login));
                cmd.Parameters.Add(new SqlParameter("@USR_NOMBRE", usuario.nombre));
                cmd.Parameters.Add(new SqlParameter("@USR_CLAVE", usuario.clave));
                cmd.Parameters.Add(new SqlParameter("@USR_PERFIL", usuario.codigoperfil));
                cmd.Parameters.Add(new SqlParameter("@USR_SUPERVISOR", usuario.supervisor));
                cmd.Parameters.Add(new SqlParameter("@USR_FLAG", usuario.flag));                
                cmd.Parameters.Add(new SqlParameter("@IDGEOCERCA", usuario.idgeocerca));
                cmd.Parameters.Add(new SqlParameter("@TELEFONO", usuario.telefono));
                cmd.ExecuteNonQuery();

            }
        }

    }

    public static List<RolBean> getUsuarioRolPerfil(String perfil)
    {
        List<RolBean> lista = new List<RolBean>();

        using (SqlConnection conn = new SqlConnection(prCadConexion))
        {

            using (SqlCommand cmd = new SqlCommand("USPW_USUARIO_S_ROL_PERFIL", conn))
            {
                conn.Open();
                cmd.CommandTimeout = 0;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@CODIGOPERFIL", perfil));

                using (SqlDataReader loDr = cmd.ExecuteReader())
                {
                    while (loDr.Read())
                    {
                        RolBean bean = new RolBean();

                        //bean.id = loDr.GetValue(loDr.GetOrdinal("ID")).ToString().Trim();

                        bean.codigorol = loDr.GetValue(loDr.GetOrdinal("CODIGO")).ToString().Trim();

                        bean.codigopadre = loDr.GetValue(loDr.GetOrdinal("CODIGOPADRE")).ToString().Trim();

                        bean.codigoperfil = loDr.GetValue(loDr.GetOrdinal("CODIGOPERFIL")).ToString().Trim();

                        bean.editar = loDr.GetValue(loDr.GetOrdinal("EDITAR")).ToString().Trim();

                        bean.eliminar = loDr.GetValue(loDr.GetOrdinal("ELIMINAR")).ToString().Trim();

                        bean.crear = loDr.GetValue(loDr.GetOrdinal("CREAR")).ToString().Trim();

                        bean.orden = fnVerNuloInt(loDr.GetValue(loDr.GetOrdinal("ORDEN"))) ;

                        bean.orden = bean.orden == 0 ? 20 : bean.orden;//para poner los numeros ingresados primero

                        bean.home = loDr.GetValue(loDr.GetOrdinal("HOME")).ToString().Trim();
 
                        bean.popupflag = loDr.GetValue(loDr.GetOrdinal("POPUPFLAG")).ToString().Trim();

                        lista.Add(bean);
                    }
                }
            }
        }
        return lista;
    }


    public static List<PerfilBean> getUsuarioPorPerfil(String usuarioSesion)
    {
        List<UsuarioBean> lista = new List<UsuarioBean>();

        using (SqlConnection conn = new SqlConnection(prCadConexion))
        {
            
            using (SqlCommand cmd = new SqlCommand("USPW_USUARIO_S_USUARIOXPERFIL", conn))
            {
                conn.Open();
                cmd.CommandTimeout = 0;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@FLAG", AbstractBean.ACTIVO));
                cmd.Parameters.Add(new SqlParameter("@CODIGOUSUARIO_SESION", fnVerNuloStr(usuarioSesion)));
                cmd.Parameters.Add(new SqlParameter("@FLAG_SUPERVISOR", fnVerNuloStr(AbstractBean.ACTIVO)));


                using (SqlDataReader loDr = cmd.ExecuteReader())
                {
                    while (loDr.Read())
                    {
                        UsuarioBean bean = new UsuarioBean();

                        bean.id = loDr.GetValue(loDr.GetOrdinal("ID")).ToString().Trim();

                        bean.codigo = loDr.GetValue(loDr.GetOrdinal("CODIGO")).ToString().Trim();

                        bean.nombre = loDr.GetValue(loDr.GetOrdinal("NOMBRE")).ToString().Trim();

                        bean.codigoperfil = loDr.GetValue(loDr.GetOrdinal("CODIGOPERFIL")).ToString().Trim();

                        bean.nombreperfil = loDr.GetValue(loDr.GetOrdinal("NOMBREPERFIL")).ToString().Trim();
                         
                        lista.Add(bean);
                    }
                }
            }
        }
        ////////////////////////// AGRUPAMOS ////////////////////////////////
        List<PerfilBean> listaPerfil = new List<PerfilBean>( );
        PerfilBean perfil = new PerfilBean( );
        foreach (UsuarioBean bean in lista)
        {
            if (bean.codigoperfil == perfil.codigo)
            {
                perfil.listaUsuario.Add(bean);

                

            }
            else 
            {
                perfil = new PerfilBean();
                perfil.nombre = bean.nombreperfil;
                perfil.codigo = bean.codigoperfil;

                perfil.codigorol = bean.codigoperfil; // agregado
                perfil.nombrerol = bean.nombreperfil; // agregado

                perfil.listaUsuario.Add(bean);
                listaPerfil.Add(perfil);

            }
        }



        return listaPerfil;
    }

    public static void addRolPerfil(string roles, string cadcrear,
            string cadeditar, string cadeliminar, string codigoperfil, string codigoHome)
    {
        using (SqlConnection conn = new SqlConnection(prCadConexion))
        {
            using (SqlCommand cmd = new SqlCommand("USPW_USUARIO_I_ROLPERFIL", conn))
            {
                conn.Open();
                cmd.CommandTimeout = 0;
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("@ROLVALUES", fnVerNuloStr(roles)));
                cmd.Parameters.Add(new SqlParameter("@CREARVALUES", fnVerNuloStr(cadcrear)));
                cmd.Parameters.Add(new SqlParameter("@EDITARVALUES", fnVerNuloStr(cadeditar)));
                cmd.Parameters.Add(new SqlParameter("@DROPVALUES", fnVerNuloStr(cadeliminar)));
                cmd.Parameters.Add(new SqlParameter("@CODIGOPERFIL", fnVerNuloStr(codigoperfil)));
                cmd.Parameters.Add(new SqlParameter("@CODIGOHOME", fnVerNuloStr(codigoHome)));
                cmd.Parameters.Add(new SqlParameter("@FLAG", AbstractBean.ACTIVO));
                
                cmd.ExecuteNonQuery();

            }
        }

    }

    public static void updatePerfilPorRol(string codigoperfil, string codigorol)
    {
        using (SqlConnection conn = new SqlConnection(prCadConexion))
        {
            using (SqlCommand cmd = new SqlCommand("USPW_USUARIO_U_PERFILXROL", conn))
            {
                conn.Open();
                cmd.CommandTimeout = 0;
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("@CODIGO", codigoperfil));

                cmd.Parameters.Add(new SqlParameter("@CODIGOROL", codigorol));

                cmd.ExecuteNonQuery();

            }
        }

    }

    public static PerfilBean getPerfilBeanPK(String id)
    {
        PerfilBean bean = null;
        using (SqlConnection conn = new SqlConnection(prCadConexion))
        {
            using (SqlCommand cmd = new SqlCommand("USPW_USUARIO_S_PERFIL_PK", conn))
            {
                conn.Open();
                cmd.CommandTimeout = 0;
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("@ID", id));

                using (SqlDataReader loDr = cmd.ExecuteReader())
                {
                    while (loDr.Read())
                    {
                        bean = new PerfilBean();
                        bean.codigo = loDr.GetValue(loDr.GetOrdinal("CODIGO")).ToString().Trim();

                        bean.nombre = loDr.GetValue(loDr.GetOrdinal("NOMBRE")).ToString().Trim();

                        bean.flag = loDr.GetValue(loDr.GetOrdinal("FLAG")).ToString().Trim();

                        bean.codigorol = loDr.GetValue(loDr.GetOrdinal("CODIGOROL")).ToString().Trim();

                        bean.id = loDr.GetValue(loDr.GetOrdinal("ID")).ToString().Trim();

                    }
                }
            }
        }

        return bean;
    }


    public static void addPerfilBean(PerfilBean beanParametro)
    {
        using (SqlConnection conn = new SqlConnection(prCadConexion))
        {
            using (SqlCommand cmd = new SqlCommand("USPW_PERFIL_I", conn))
            {
                conn.Open();
                cmd.CommandTimeout = 0;
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("@CODIGO", fnVerNuloStr(beanParametro.codigo)));

                cmd.Parameters.Add(new SqlParameter("@NOMBRE", fnVerNuloStr(beanParametro.nombre)));

                cmd.Parameters.Add(new SqlParameter("@FLAG", fnVerNuloStr(beanParametro.flag)));

                cmd.Parameters.Add(new SqlParameter("@CODIGOROL", fnVerNuloStr(beanParametro.codigorol)));

                cmd.Parameters.Add(new SqlParameter("@ID", fnVerNuloStr(beanParametro.id)));

                cmd.ExecuteNonQuery();

            }
        }
    }

    public static List<AbstractBean> findPerfilBean(PerfilBean beanParametro)
    {
        List<AbstractBean> lista = new List<AbstractBean>();
        PerfilBean bean = null;


        /**********************************************************************/
        using (SqlConnection conn = new SqlConnection(prCadConexion))
        {

            using (SqlCommand cmd = new SqlCommand("USPW_PERFIL_S_BUSQUEDA", conn))
            {
                conn.Open();
                cmd.CommandTimeout = 0;
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("@CODIGO", fnVerNuloStr(beanParametro.codigo)));

                cmd.Parameters.Add(new SqlParameter("@NOMBRE", fnVerNuloStr(beanParametro.nombre)));

                cmd.Parameters.Add(new SqlParameter("@FLAG", fnVerNuloStr(beanParametro.flag)));

                cmd.Parameters.Add(new SqlParameter("@PIV_PAG_ACTUAL", beanParametro.paginaactual));

                cmd.Parameters.Add(new SqlParameter("@PIV_NUMERO_REGISTROS", beanParametro.registroporpagina));

                cmd.Parameters.Add(new SqlParameter("@BUSCARNAME", fnVerNuloStr(beanParametro.buscarname)));

                cmd.Parameters.Add(new SqlParameter("@BUSCARORDEN", beanParametro.buscarorden));


                using (SqlDataReader loDr = cmd.ExecuteReader())
                {
                    while (loDr.Read())
                    {
                        bean = new PerfilBean();
                        bean.codigo = loDr.GetValue(loDr.GetOrdinal("CODIGO")).ToString().Trim();

                        bean.nombre = loDr.GetValue(loDr.GetOrdinal("NOMBRE")).ToString().Trim();

                        bean.flag = loDr.GetValue(loDr.GetOrdinal("FLAG")).ToString().Trim();

                        bean.codigorol = loDr.GetValue(loDr.GetOrdinal("CODIGOROL")).ToString().Trim();

                        bean.id = loDr.GetValue(loDr.GetOrdinal("ID")).ToString().Trim();

                        bean.tamaniototal = loDr.GetValue(loDr.GetOrdinal("TAMANIOTOTAL")).ToString().Trim();
                        lista.Add(bean);
                    }
                }
            }
        }

        return lista;
    }

}
